package OJPractise;
import java.util.PriorityQueue;
import java.util.Comparator;

class Solution {
    public int[] smallestK(int[] arr, int k) {
        if(arr.length==0) {
            return arr;
        }
        //创建大根堆
        Imp imp = new Imp();
        PriorityQueue<Integer> queue = new PriorityQueue<>(imp);
        for(int i = 0; i < k; i++) {
            queue.offer(arr[i]);
        }
        for(int i = k; i < arr.length; i++) {
            if(queue.peek()>arr[i]) {
                queue.poll();
                queue.offer(arr[i]);
            }
        }
        int[] ret = new int[k];
        for(int i = 0; i < k; i++) {
            ret[i] = queue.poll();
        }
        return ret;
    }
}
class Imp implements Comparator<Integer> {
    public int compare(Integer o1, Integer o2) {
        return o2.compareTo(o1);
    }
}
class practise{
    //此为暑假作业的一些代码
    public static void main1(String[] args) {
        /*编程求 1~10000 之间的所有“完全数”，完全数是该数的所有因子之和等于该数的数。例如，6 的因子有 1、2、
    3，且 6=1+2+3，所以 6 是完全数*/
        int sum = 0;
        for(int i = 1; i <= 10000; i++) {
            if(isPerfectNumber(i)) {
                sum+=i;
            }
        }
        System.out.println(sum);
    }
    public static boolean isPerfectNumber(int key) {
        /**
         * 判断完全数需要找到这个数所有的因子，由于需要所有因子相加等于本身，故本身不算自己的因子
         * 示例中写到 6 的 因子为 1 2 3 ，故 1为其因子*/
        int sum = 0;
        for(int i = 1; i < key; i++) {
            if(key%i==0) {
                sum+=i;
            }
        }
        return sum==key;
    }

    public static void main(String[] args) {
        /*猴子吃桃问题。猴子第一天摘下若干个桃子，当时就吃了一半，还不过瘾，就又吃了一个。第二天又将剩下的
桃子吃掉一半，又多吃了一个。以后每天都吃前一天剩下的一半零一个。到第 10 天在想吃的时候就剩一个桃子了,
求第一天共摘下来多少个桃子？*/
        //解题思路：每天都是吃掉前一天的1/2 + 1个，可用循环
        int day = 10;
        int peach = 1;
        for (day = 10; day > 0; day--) {
            System.out.println("第"+day+"有"+peach+"个桃子");
            peach = (peach+1)*2;
        }
    }
}